Importing the required library.
library(tidyverse)
library(plotly)
library(sf) # For spatial data
library(ggplot2)
Loading the data from the data directory and reading it through the
imported library.
Visualization 1 - Linear Model: Total Births Over Seasons ( Revised
- added seasons )
birth_data_url <- "../data/us_births_00_14.csv"
births <- read.csv(birth_data_url, stringsAsFactors = FALSE)
filtering data to create plot
monthly_births <- births %>%
group_by(year, month) %>%
summarize(total_births = sum(births), .groups = 'drop') %>%
mutate(date = as.Date(paste(year, month, "01", sep = "-")),
month_name = format(date, "%B"))
# Adding a season column to the data
monthly_births <- monthly_births %>%
mutate(season = case_when(
month %in% 3:5 ~ "Spring",
month %in% 6:8 ~ "Summer",
month %in% 9:11 ~ "Fall",
TRUE ~ "Winter"
))
generating interactive plot from the filtered data
plot_season <- plot_ly(monthly_births, x = ~year, y = ~total_births, color = ~season, type = 'scatter', mode = 'lines+markers', text = ~paste("Year:", year, "<br>Season:", season, "<br>Total Births:", total_births), hoverinfo = 'text') %>%
layout(
title = "Total Monthly Births in the US (2000-2014) by Seasons",
xaxis = list(title = "Year"),
yaxis = list(title = "Total Births")
)
plot_season
Visualization 2 - Linear model: Predicting total births based on
year ( Revised )
Linear model: Predicting total births based on year
model <- lm(total_births ~ year, data = monthly_births)
Summary of the model
summary(model)
Call:
lm(formula = total_births ~ year, data = monthly_births)
Residuals:
Min 1Q Median 3Q Max
-44575 -12125 57 13426 50872
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2361462 624179 3.783 0.000211 ***
year -1004 311 -3.230 0.001475 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 18030 on 178 degrees of freedom
Multiple R-squared: 0.05536, Adjusted R-squared: 0.05005
F-statistic: 10.43 on 1 and 178 DF, p-value: 0.001475
Plot the model with ggplot2
ggplot(monthly_births, aes(x = year, y = total_births)) +
geom_point() +
geom_smooth(method = "lm", col = "#532D8E") +
labs(title = "Linear Model: Total Births Over Years", x = "Year", y = "Total Births") +
theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

Resonse of the feedback for this plot.
Predicting total births over the years is crucial for public
health planning, educational infrastructure, and economic forecasting.
It helps allocate resources efficiently, project school enrollments
accurately, and prepare for future labor market demands.
By confirming the predicted values through assumptions of
linearity, independence, homoscedasticity, and normality, we ensure the
predictions are reliable and actionable, providing valuable insights for
strategic planning and decision-making.
Visualization 3 - Lakes in Florida
Reading the shape file from the data directory
lakes <- st_read("../data/Florida_Lakes/Florida_Lakes.shp")
Reading layer `Florida_Lakes' from data source
`C:\Users\desdiv10\Documents\Assignments\Data Visualization\workspace\dataviz_final_project\data\Florida_Lakes\Florida_Lakes.shp'
using driver `ESRI Shapefile'
Simple feature collection with 4243 features and 6 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -87.42774 ymin: 25.02625 xmax: -80.03097 ymax: 31.00254
Geodetic CRS: WGS 84
mapping lakes to the florida map using red color
ggplot() +
geom_sf(data = lakes, fill = "red", color = "black") +
ggtitle("Lakes in Florida") +
theme_minimal()

LS0tDQp0aXRsZTogIkludGVyYWN0aXZlIFZpc3VhbGl6YXRpb24gb2YgVVMgTW9udGhseSBCaXJ0aCBEYXRhICgyMDAwLTIwMTQpIGFsb25nIHdpdGggcHJlZGVjdGlvbiBzY2F0dGVyIHBsb3QgJiBMYWtlcyBpbiBGbG9yaWRhIC0gU3BhdGlhbCBWaXN1bGl6YXRpb24iDQphdXRob3I6ICJEaXZ5ZXNoIERlc2FpIC0gYGRkZXNhaTc2NTZAZmxvcmlkYXBvbHkuZWR1YCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoqKioNCg0KPiBJbXBvcnRpbmcgdGhlIHJlcXVpcmVkIGxpYnJhcnkuDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoc2YpICMgRm9yIHNwYXRpYWwgZGF0YQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpgYGANCg0KPiBMb2FkaW5nIHRoZSBkYXRhIGZyb20gdGhlIGRhdGEgZGlyZWN0b3J5IGFuZCByZWFkaW5nIGl0IHRocm91Z2ggdGhlIGltcG9ydGVkIGxpYnJhcnkuDQoNCiMjIyBWaXN1YWxpemF0aW9uIDEgLSBMaW5lYXIgTW9kZWw6IFRvdGFsIEJpcnRocyBPdmVyIFNlYXNvbnMgKCBSZXZpc2VkIC0gYWRkZWQgc2Vhc29ucyApDQoNCg0KYGBge3J9DQpiaXJ0aF9kYXRhX3VybCA8LSAiLi4vZGF0YS91c19iaXJ0aHNfMDBfMTQuY3N2Ig0KYmlydGhzIDwtIHJlYWQuY3N2KGJpcnRoX2RhdGFfdXJsLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpDQpgYGANCg0KPiBmaWx0ZXJpbmcgZGF0YSB0byBjcmVhdGUgcGxvdA0KDQpgYGB7cn0NCm1vbnRobHlfYmlydGhzIDwtIGJpcnRocyAlPiUNCiAgZ3JvdXBfYnkoeWVhciwgbW9udGgpICU+JQ0KICBzdW1tYXJpemUodG90YWxfYmlydGhzID0gc3VtKGJpcnRocyksIC5ncm91cHMgPSAnZHJvcCcpICU+JQ0KICAgIG11dGF0ZShkYXRlID0gYXMuRGF0ZShwYXN0ZSh5ZWFyLCBtb250aCwgIjAxIiwgc2VwID0gIi0iKSksDQogICAgICAgICBtb250aF9uYW1lID0gZm9ybWF0KGRhdGUsICIlQiIpKQ0KDQojIEFkZGluZyBhIHNlYXNvbiBjb2x1bW4gdG8gdGhlIGRhdGENCm1vbnRobHlfYmlydGhzIDwtIG1vbnRobHlfYmlydGhzICU+JQ0KICBtdXRhdGUoc2Vhc29uID0gY2FzZV93aGVuKA0KICAgIG1vbnRoICVpbiUgMzo1IH4gIlNwcmluZyIsDQogICAgbW9udGggJWluJSA2OjggfiAiU3VtbWVyIiwNCiAgICBtb250aCAlaW4lIDk6MTEgfiAiRmFsbCIsDQogICAgVFJVRSB+ICJXaW50ZXIiDQogICkpDQoNCmBgYA0KDQoNCg0KPiBnZW5lcmF0aW5nIGludGVyYWN0aXZlIHBsb3QgZnJvbSB0aGUgZmlsdGVyZWQgZGF0YQ0KDQpgYGB7cn0NCg0KcGxvdF9zZWFzb24gPC0gcGxvdF9seShtb250aGx5X2JpcnRocywgeCA9IH55ZWFyLCB5ID0gfnRvdGFsX2JpcnRocywgY29sb3IgPSB+c2Vhc29uLCB0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ2xpbmVzK21hcmtlcnMnLCB0ZXh0ID0gfnBhc3RlKCJZZWFyOiIsIHllYXIsICI8YnI+U2Vhc29uOiIsIHNlYXNvbiwgIjxicj5Ub3RhbCBCaXJ0aHM6IiwgdG90YWxfYmlydGhzKSwgaG92ZXJpbmZvID0gJ3RleHQnKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlRvdGFsIE1vbnRobHkgQmlydGhzIGluIHRoZSBVUyAoMjAwMC0yMDE0KSBieSBTZWFzb25zIiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiWWVhciIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJUb3RhbCBCaXJ0aHMiKQ0KICApDQpwbG90X3NlYXNvbg0KYGBgDQoNCiMjIyBWaXN1YWxpemF0aW9uIDIgLSBMaW5lYXIgbW9kZWw6IFByZWRpY3RpbmcgdG90YWwgYmlydGhzIGJhc2VkIG9uIHllYXIgKCBSZXZpc2VkICkNCg0KDQo+IExpbmVhciBtb2RlbDogUHJlZGljdGluZyB0b3RhbCBiaXJ0aHMgYmFzZWQgb24geWVhcg0KDQoNCmBgYHtyfQ0KbW9kZWwgPC0gbG0odG90YWxfYmlydGhzIH4geWVhciwgZGF0YSA9IG1vbnRobHlfYmlydGhzKQ0KYGBgDQoNCg0KPiBTdW1tYXJ5IG9mIHRoZSBtb2RlbA0KDQpgYGB7cn0NCnN1bW1hcnkobW9kZWwpDQpgYGANCg0KDQo+IFBsb3QgdGhlIG1vZGVsIHdpdGggZ2dwbG90Mg0KDQpgYGB7cn0NCmdncGxvdChtb250aGx5X2JpcnRocywgYWVzKHggPSB5ZWFyLCB5ID0gdG90YWxfYmlydGhzKSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2wgPSAiIzUzMkQ4RSIpICsNCiAgbGFicyh0aXRsZSA9ICJMaW5lYXIgTW9kZWw6IFRvdGFsIEJpcnRocyBPdmVyIFllYXJzIiwgeCA9ICJZZWFyIiwgeSA9ICJUb3RhbCBCaXJ0aHMiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoqKiogDQoNCg0KIyMjIyBSZXNvbnNlIG9mIHRoZSBmZWVkYmFjayBmb3IgdGhpcyBwbG90Lg0KDQpfUHJlZGljdGluZyB0b3RhbCBiaXJ0aHMgb3ZlciB0aGUgeWVhcnMgaXMgY3J1Y2lhbCBmb3IgcHVibGljIGhlYWx0aCBwbGFubmluZywgZWR1Y2F0aW9uYWwgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBlY29ub21pYyBmb3JlY2FzdGluZy4gSXQgaGVscHMgYWxsb2NhdGUgcmVzb3VyY2VzIGVmZmljaWVudGx5LCBwcm9qZWN0IHNjaG9vbCBlbnJvbGxtZW50cyBhY2N1cmF0ZWx5LCBhbmQgcHJlcGFyZSBmb3IgZnV0dXJlIGxhYm9yIG1hcmtldCBkZW1hbmRzLl8gIA0KDQpfQnkgY29uZmlybWluZyB0aGUgcHJlZGljdGVkIHZhbHVlcyB0aHJvdWdoIGFzc3VtcHRpb25zIG9mIGxpbmVhcml0eSwgaW5kZXBlbmRlbmNlLCBob21vc2NlZGFzdGljaXR5LCBhbmQgbm9ybWFsaXR5LCB3ZSBlbnN1cmUgdGhlIHByZWRpY3Rpb25zIGFyZSByZWxpYWJsZSBhbmQgYWN0aW9uYWJsZSwgcHJvdmlkaW5nIHZhbHVhYmxlIGluc2lnaHRzIGZvciBzdHJhdGVnaWMgcGxhbm5pbmcgYW5kIGRlY2lzaW9uLW1ha2luZy5fICANCg0KDQoqKioNCg0KIyMjIFZpc3VhbGl6YXRpb24gMyAtIExha2VzIGluIEZsb3JpZGENCg0KDQo+IFJlYWRpbmcgdGhlIHNoYXBlIGZpbGUgZnJvbSB0aGUgZGF0YSBkaXJlY3RvcnkNCg0KYGBge3J9DQpsYWtlcyA8LSBzdF9yZWFkKCIuLi9kYXRhL0Zsb3JpZGFfTGFrZXMvRmxvcmlkYV9MYWtlcy5zaHAiKQ0KYGBgDQoNCj4gbWFwcGluZyBsYWtlcyB0byB0aGUgZmxvcmlkYSBtYXAgdXNpbmcgcmVkIGNvbG9yDQoNCmBgYHtyfQ0KZ2dwbG90KCkgKw0KICBnZW9tX3NmKGRhdGEgPSBsYWtlcywgZmlsbCA9ICJyZWQiLCBjb2xvciA9ICJibGFjayIpICsNCiAgZ2d0aXRsZSgiTGFrZXMgaW4gRmxvcmlkYSIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGA=